package day01.com.it;
/*
 *文件名: Testlambda
 *创建者:
 *创建时间:2025/5/19 15:57
 *描述:
 */
public class Testlambda {
    public static void main(String[] args) {
        testD();
    }

    public static void testB(){
        //1.创建B接口的lambda表达式对象
        B b1=new B() {

            @Override
            public void show(String name) {
                System.out.println(name);
            }
        };
        //创建B接口的lambda表达式对象
        B b2=name -> System.out.println(name);

        //创建B接口的lambda表达式对象
        B b3= System.out::println;//System.out::println==name -> System.out.println(name)
        b3.show("肖伟");
    }

    public static void testC() {
        //1.创建C接口的匿名内部类对象
        C c1=new C() {
            @Override
            public String show(String name) {
                return " name = " + name;
            }
        };
        //2.创建C接口的lambda表达式对象
        C c2 = name -> "name = " + name;

        //3.创建C接口的lambda表达式对象
        C c3=Testlambda::show4;
        c3.show("常山赵子龙");

    }
    public static String show4(String name) {
        return "name = " + name;
    }

    public static void testD() {
        D d1=new D() {
            @Override
            public int max(int a, int b) {
                return a > b ? a : b;
            }
        };
        D d2 = ((a, b) -> a > b ? a : b);

        D d3 = Math::max;
        int max=d3.max(1,2);
        System.out.println(max);
    }

    public static void testA() {
        //1.创建A接口的匿名内部类对象
        A a1=new A() {
            @Override
            public void show(String name, int age) {
                System.out.println(name+","+age);
            }
        };
        //2.将匿名内部类对象改成lambda表达式
        A a2=(name, age) -> System.out.println(name+","+age);
        a2.show("张三",18);

        //3.使用方法引用替换lambda表达式
        A a3=Testlambda::show2;
        a3.show("李四",20);

        //4.使用方法引用替换lambda表达式（成员方法）
        Testlambda testlambda=new Testlambda();
        A a4=Testlambda::show3;
        a4.show("王五",35);
    }

    //定义一个成员方法，故意让返回值和形参和A接口中的方法一致
    public static void show2(String name, int age) {
        System.out.println("show2"+name+","+age);
    }
    public static void show3(String name, int age) {
        System.out.println("show2"+name+","+age);
    }
}
